<?php 

namespace core;

class keep
{
    public static $classMap = [];

    public $assign = [];

    static public function run()
    {
    	// 实例化路由类
        $route = new \core\lib\route();
        // 获取访问的控制器
        $ctrlClass = $route->ctrl;
        // 获取访问的方法
        $action = $route->action;
        // 拼接控制器的文件路径
        $ctrlFilePath = APP.'/ctrl/'.$ctrlClass.'Ctrl.php';
        // 拼接控制器的目录以及命名空间
        $ctrlClassName = '\\'.CTRL.'\\ctrl\\'.$ctrlClass.'Ctrl';
        // 验证文件是否存在
        if (is_file($ctrlFilePath)) {
        	include $ctrlFilePath;
        	$ctrl = new $ctrlClassName();
        	$ctrl->$action();
        } else {
        	throw new \Excpthion('找不到控制器');
        }
    }

    static public function load($class)
    {
        // 自动加载类库
        // new \core\Route();
        // KEEP.'/core/route.php';
        if (isset(self::$classMap[$class])) {
            return true;
        } else {
            // 第一步 将反斜线转为正斜线
            $class = str_replace('\\', DIRECTORY_SEPARATOR, $class);
            // 第二步 拼接文件路径
            $classPath = KEEP . '/' . $class . '.php';
            // 验证文件是否存在
            if (is_file($classPath)) {
            	// 第三步 加载文件
            	include $classPath;
            	// 第四部 记录加载过的类 
                self::$classMap[$class] = $class;
            } else {
                return false;
            }
        }

    }

    public function assign($name, $value)
    {
        $this->assign[$name] = $value;
    }

    public function display($file)
    {
        extract($this->assign);
        $file = APP.'/views/'.$file;
        if (is_file($file)) {
            include $file;
        }
    }
}